package com.example.mqttmanage.domain.base;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;

public class ResponseResult<T> extends HashMap<String, Object> implements Serializable {
    private static final long serialVersionUID = 1L;

    public static final String CODE_TAG = "code";
    public static final String MSG_TAG = "msg";
    public static final String DATA_TAG = "data";

    // 构造函数
    public ResponseResult() {
        // 默认构造函数
    }

    // 通过键获取code
    public int getCode() {
        return (int) this.get(CODE_TAG);
    }

    // 通过键获取msg
    public String getMsg() {
        return (String) this.get(MSG_TAG);
    }

    // 通过键获取data，类型安全
    public T getData() {
        return (T) this.get(DATA_TAG);
    }

    // 覆盖put方法，支持链式调用
    @Override
    public ResponseResult<T> put(String key, Object value) {
        super.put(key, value);
        return this;
    }

    // 静态方法：成功响应（带消息和数据）
    public static <T> ResponseResult<T> success(String msg, T data) {
        ResponseResult<T> result = new ResponseResult<>();
        result.put(CODE_TAG, Status.SUCCESS_CODE);
        result.put(MSG_TAG, msg);
        result.put(DATA_TAG, data);
        return result;
    }

    // 静态方法：成功响应（默认消息）
    public static <T> ResponseResult<T> success(T data) {
        return success("操作成功", data);
    }

    //静态方法：返回响应成功的个数和失败的列表
    public static <T> ResponseResult<T> successs(int successCount, List<T> failList) {
        ResponseResult<T> result = new ResponseResult<>();
        result.put(CODE_TAG, Status.SUCCESS_CODE);
        result.put(MSG_TAG, "操作成功");
        result.put("设备添加成功个数：", successCount);
        result.put("设备地址失败列表：", failList);
        return result;
    }

    // 静态方法：成功响应（无数据）
    public static <T> ResponseResult<T> success() {
        return success("操作成功", null);
    }

    // 静态方法：失败响应（带消息）
    public static <T> ResponseResult<T> error(String msg) {
        return error(Status.ERROR_CODE, msg);
    }

    // 静态方法：失败响应（带自定义错误码）
    public static <T> ResponseResult<T> error(int code, String msg) {
        ResponseResult<T> result = new ResponseResult<>();
        result.put(CODE_TAG, code);
        result.put(MSG_TAG, msg);
        return result;
    }
    //静态方法 ：成功响应（带自定义错误码）
    public static <T> ResponseResult<T> success(int code, String msg) {
        ResponseResult<T> result = new ResponseResult<>();
        result.put(CODE_TAG, code);
        result.put(MSG_TAG, msg);
        return result;
    }

}